/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.skycode.segu.mbean;

import com.skycode.conf.util.Video;
import com.skycode.segu.dto.UsuarioDto;
import com.skycode.segu.manager.UsuarioManager;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.List;
import java.util.Locale;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;

/**
 * @author SkyCode (skycode@gmail.com)
 * @since 13/01/2014
 * @version 1.0
 */
@SessionScoped
@ManagedBean
public class UsuarioMBean implements Serializable {

    private UsuarioDto dto;
    private UsuarioDto dtoFiltro;
    private UsuarioDto dtoVer;
    private List<UsuarioDto> lista;
    private UsuarioManager usuarioManager;
    private String direccionVideo;
    private SessionMBean sessionMBean;
    private boolean esAdmin;
    private UploadedFile upFile;
    private UsuarioDto usuarioConectado;

    /**
     * UsuarioMBean(): constructor de la clase encargado de inicializar las
     * variables
     *
     * @since 13/01/2014
     */
    public UsuarioMBean() {
        usuarioManager = new UsuarioManager();
        dto = usuarioManager.inicializar();
        dtoFiltro = usuarioManager.inicializar();
        dtoVer = usuarioManager.inicializar();
        usuarioConectado = usuarioManager.inicializar();
        lista = null;
        esAdmin = false;
    }

    public String iniciar() {
        return this.usuarioManager.getUrlLista();
    }

    /**
     * buscar(): realiza la búsqueda de registros según el filtro ingresado
     *
     * @since 14/01/2014
     */
    public void buscar() {
        this.lista = this.usuarioManager.obtenerUsuarios(this.dtoFiltro);
    }

    /**
     * nuevo(): permite ingresar un nuevo usuario en el sistema
     *
     * @since 14/01/2014
     * @return
     */
    public String nuevo() {
        this.dto = this.usuarioManager.inicializar();
        return this.usuarioManager.getUrl();
    }

    public void fileUploadListener(FileUploadEvent event) {
        try {
                OutputStream out = new FileOutputStream("D:/PruebaLA/LazarteTuto111/web/img/" + event.getFile().getFileName());
                out.write(event.getFile().getContents());
                out.close();
                this.dto.setUrlImagen("/img/" + event.getFile().getFileName());            
        } catch (Exception e) {
            System.out.println("EXCEPTION!!!");
            e.printStackTrace();
        }
    }

    /**
     * guardar(): guarda un nuevo registro
     *
     * @since 14/01/2014
     */
    public String guardar() {
        this.usuarioManager.guardar(this.dto);
        this.buscar();
        return this.usuarioManager.getUrlLista();
    }

    public void change() {
        UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
        viewRoot.setLocale(new Locale("en"));
    }

    /**
     * validarUsuario(): verifica si el usuario ingresado existe en la base de
     * datos
     *
     * @since 13/01/2014
     * @return ir
     */
    public String validarUsuario() {
        System.out.println("INGRESANDO");
        String ir = "";    
        this.usuarioConectado = this.usuarioManager.existeUsuario(this.dto);
        if (this.usuarioConectado.getId() != null && !this.usuarioConectado.getId().equals(0L)) {
            System.out.println("INGRESO CORRECTAMENTE");
            ir = this.usuarioManager.getUrlLista();
            this.esAdmin = true;
        } else {
            System.out.println("NO INGRESO!");
            ir = null;
        }
        System.out.println("IR: " + ir);
        return ir;
    }

    public void cargarVideo() {
        System.out.println("ENTRANDO");
        System.out.println("DTO URL: " + this.dtoVer.getUrl());
        String urlVideo = this.dtoVer.getUrl();
        System.out.println("URL VIDEO: " + urlVideo);
        int k = urlVideo.indexOf("=");
        String ur = urlVideo.substring(k + 1);
        System.out.println("K: " + k);
        System.out.println("UR: " + ur);
        this.direccionVideo = "//www.youtube.com/embed/" + ur;
    }

    public void cerrar() {
        boolean resultado = true;
        this.direccionVideo = "";
        RequestContext context = RequestContext.getCurrentInstance();
        context.addCallbackParam("CallbackParam", resultado);
    }

    public void verVideo() {
        Video v = new Video();
    }

    public String cerrarSesion() {
        this.dto = this.usuarioManager.inicializar();
        this.usuarioConectado = this.usuarioManager.inicializar();
        this.esAdmin = false;
        return "/login";
    }

    public UsuarioDto getDto() {
        return dto;
    }

    public void setDto(UsuarioDto dto) {
        this.dto = dto;
    }

    public UsuarioDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(UsuarioDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public List<UsuarioDto> getLista() {
        return lista;
    }

    public void setLista(List<UsuarioDto> lista) {
        this.lista = lista;
    }

    public UsuarioDto getDtoVer() {
        return dtoVer;
    }

    public void setDtoVer(UsuarioDto dtoVer) {
        this.dtoVer = dtoVer;
    }

    public String getDireccionVideo() {
        return direccionVideo;
    }

    public void setDireccionVideo(String direccionVideo) {
        this.direccionVideo = direccionVideo;
    }

    public boolean isEsAdmin() {
        return esAdmin;
    }

    public void setEsAdmin(boolean esAdmin) {
        this.esAdmin = esAdmin;
    }

    public UploadedFile getUpFile() {
        return upFile;
    }

    public void setUpFile(UploadedFile upFile) {
        this.upFile = upFile;
    }

    public UsuarioDto getUsuarioConectado() {
        return usuarioConectado;
    }

    public void setUsuarioConectado(UsuarioDto usuarioConectado) {
        this.usuarioConectado = usuarioConectado;
    }
}
